import axios from 'axios'

// 创建 axios 实例
const request = axios.create({
  baseURL: window.config?.baseUrl || '/api', // 从环境变量获取基础URL
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Cache-Control': 'no-cache'
  },
  // 添加 Chrome 兼容性配置
  withCredentials: false,
  // 禁用请求缓存
  validateStatus: function (status) {
    return status >= 200 && status < 300; // 默认
  }
})

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    const token = sessionStorage.getItem('pmp-token')
    if (token) {
      config.headers.Authorization = `${token}`
    }
    return config
  },
  (error) => {
    // 对请求错误做些什么
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    if (response.config.responseType === 'blob') {
      return response
    }
    if (response.data.code === '401') {
      localStorage.removeItem('token')
      router.push('/login')
    } 
    return response.data
  },
  (error) => {
    // 添加详细的错误日志
    console.error('请求错误详情:', {
      message: error.message,
      code: error.code,
      config: error.config,
      response: error.response,
      request: error.request
    })
    
    if (error.code === 'ERR_NETWORK') {
      console.error('网络错误: 请检查网络连接和目标服务器状态')
    } else if (error.code === 'ERR_ADDRESS_UNREACHABLE') {
      console.error('地址不可达: 请检查IP地址和端口是否正确')
    } else if (error.code === 'ECONNREFUSED') {
      console.error('连接被拒绝: 目标服务器可能未启动或端口未开放')
    }
    
    return Promise.reject(error)
  }
)

// 封装 GET 请求
export const get = (url, params = {}, config = {}) => {
  return request.get(url, { params, ...config })
}

// 封装 POST 请求
export const post = (url, data = {}, config = {}) => {
  return request.post(url, data, config)
}

// 封装 PUT 请求
export const put = (url, data = {}, config = {}) => {
  return request.put(url, data, config)
}

// 封装 DELETE 请求
export const del = (url, config = {}) => {
  return request.delete(url, config)
}

// 封装 PATCH 请求
export const patch = (url, data = {}, config = {}) => {
  return request.patch(url, data, config)
}

// 导出 axios 实例，以便需要时直接使用
export default request
